package fr.free.jchecs.swg;

import java.io.File;

import fr.free.jchecs.core.Game;

public interface UI {
	/**
	 * Returns the value of a Boolean property.
	 * 
	 * @param key Key identifier property.
	 * @return Property value.
	 */
	boolean getBooleanProperty(final String key);

	/**
	 * Returns a reference to the current game.
	 * 
	 * @return Current game.
	 */
	Game getGame();

	/**
	 * Renvoi une référence vers l'éventuel fichier PGN contenant la partie.
	 * 
	 * @return Fichier PGN de la partie (peut être à null).
	 */
	File getGameFile();

	/**
	 * Renvoi une référence vers l'éventuel fichier FEN contenant la position.
	 * 
	 * @return Fichier FEN de position (peut être à null).
	 */
	File getPositionFile();

	/**
	 * Renvoi la valeur d'une propriété.
	 * 
	 * @param pCle
	 *            Cle identifiant la propriété.
	 * @return Valeur de la propriété.
	 */
	String getProperty(final String pCle);

	/**
	 * Alimente la valeur d'une propriété booléenne.
	 * 
	 * @param pCle
	 *            Cle identifiant la propriété.
	 * @param pValeur
	 *            Valeur de la propriété.
	 */
	void setBooleanProperty(final String pCle, final boolean pValeur);

	/**
	 * Stocke la référence de l'éventuel fichier PGN de partie.
	 * 
	 * @param pFichier
	 *            Fichier PGN de partie (peut être à null).
	 */
	void setGameFile(final File pFichier);

	/**
	 * Stocke la référence de l'éventuel fichier FEN de position.
	 * 
	 * @param pFichier
	 *            Fichier FEN de position (peut être à null).
	 */
	void setPositionFile(final File pFichier);

	/**
	 * Alimente la valeur d'une propriété.
	 * 
	 * @param pCle
	 *            Cle identifiant la propriété.
	 * @param pValeur
	 *            Valeur de la propriété.
	 */
	void setProperty(final String pCle, final String pValeur);

	/**
	 * Lance l'interface graphique.
	 */
	void start();

	/**
	 * Arrète l'interface utilisateur.
	 */
	void stop();
}
